iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

ESP32 Micropython 從入門到實用系列 第 10

10. GPIO的使用

  • 分享至 

  • xImage
  •  

接下來,我們將以幾天的時間,分別介紹 ESP32 內建的週邊裝置,以及在 Micropython 如何來使用,我們介紹的順序從簡易到難這樣的安排,主要參考 Micropython 官方文件,但只着重在變頻風扇會用到的週邊爲主。

我們昨天簡單的點亮一顆 LED ,其實已經使用了 ESP32 內建的週邊裝置 GPIO, 有關 GPIO 的說明,我們可以參考 wiki 網站的說明,我們簡單引述最前面一段話

A general-purpose input/output (GPIO) is an uncommitted digital signal pin on an integrated circuit or electronic circuit (e.g. MCUs/MPUs) board which may be used as an input or output, or both, and is controllable by software.

我們把這段英文丟到 google 翻譯,如下:

通用輸入/輸出 (GPIO) 是積體電路或電子電路(例如 MCU/MPU)板上未指定的數位訊號引腳,可用作輸入或輸出或兩者,並且可由軟體控制。

有時候我會吐槽一下,若是我們把 wiki 的頁面切換到 繁體中文,那文件(wiki GPIO)的品質實在不行,當然這表示我們臺灣人在這方面的參與度不高! 我是一個開源的推廣者,儘量鼓勵大家能多參與,站在巨人的肩膀時,也不忘也下來幫助同好。

我們昨天點亮 LED 的文章裡,其實已經用到 GPIO 的輸出功能,以下整理官方的說明文件:

使用 machine.Pin class(類別):

from machine import Pin

p0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.on()                 # set pin to "on" (high) level
p0.off()                # set pin to "off" (low) level
p0.value(1)             # set pin to on/high

p2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1

p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation
p6 = Pin(6, Pin.OUT, drive=Pin.DRIVE_3) # set maximum drive strength

我們可以從 這裡看到 ESP32-S3 有那些 GPIO 接腳可以使用

......

#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3

#define MICROPY_HW_ENABLE_GPIO0 (1)
#define MICROPY_HW_ENABLE_GPIO1 (1)
#define MICROPY_HW_ENABLE_GPIO2 (1)
#define MICROPY_HW_ENABLE_GPIO3 (1)
#define MICROPY_HW_ENABLE_GPIO4 (1)
#define MICROPY_HW_ENABLE_GPIO5 (1)
#define MICROPY_HW_ENABLE_GPIO6 (1)
#define MICROPY_HW_ENABLE_GPIO7 (1)
#define MICROPY_HW_ENABLE_GPIO8 (1)
#define MICROPY_HW_ENABLE_GPIO9 (1)
#define MICROPY_HW_ENABLE_GPIO10 (1)
#define MICROPY_HW_ENABLE_GPIO11 (1)
#define MICROPY_HW_ENABLE_GPIO12 (1)
#define MICROPY_HW_ENABLE_GPIO13 (1)
#define MICROPY_HW_ENABLE_GPIO14 (1)
#define MICROPY_HW_ENABLE_GPIO15 (1)
#define MICROPY_HW_ENABLE_GPIO16 (1)
#define MICROPY_HW_ENABLE_GPIO17 (1)
#define MICROPY_HW_ENABLE_GPIO18 (1)
#if !CONFIG_USB_CDC_ENABLED
#define MICROPY_HW_ENABLE_GPIO19 (1)
#define MICROPY_HW_ENABLE_GPIO20 (1)
#endif
#define MICROPY_HW_ENABLE_GPIO21 (1)
#if !CONFIG_SPIRAM
#define MICROPY_HW_ENABLE_GPIO26 (1)
#endif
#if !CONFIG_SPIRAM_MODE_OCT
#define MICROPY_HW_ENABLE_GPIO33 (1)
#define MICROPY_HW_ENABLE_GPIO34 (1)
#define MICROPY_HW_ENABLE_GPIO35 (1)
#define MICROPY_HW_ENABLE_GPIO36 (1)
#define MICROPY_HW_ENABLE_GPIO37 (1)
#endif
#define MICROPY_HW_ENABLE_GPIO38 (1)
#define MICROPY_HW_ENABLE_GPIO39 (1)
#define MICROPY_HW_ENABLE_GPIO40 (1)
#define MICROPY_HW_ENABLE_GPIO41 (1)
#define MICROPY_HW_ENABLE_GPIO42 (1)
#define MICROPY_HW_ENABLE_GPIO43 (1)
#define MICROPY_HW_ENABLE_GPIO44 (1)
#define MICROPY_HW_ENABLE_GPIO45 (1)
#define MICROPY_HW_ENABLE_GPIO46 (1)
#if CONFIG_IDF_TARGET_ESP32S3 && MICROPY_HW_ESP32S3_EXTENDED_IO
#define MICROPY_HW_ENABLE_GPIO47 (1)
#define MICROPY_HW_ENABLE_GPIO48 (1)
#endif
......

以 BPI-leaf-S3 爲例,我們可以到官網查詢其規格或者是電路圖,畢竟這是一個開源的開發板,這些資料都是公開的。從這些文件,我們可以從中挑選有哪些可用的 GPIO 接腳可用、哪些接腳默認爲高電位、哪些接腳默認爲低電位等等,我們在電風扇控制的電路中需要好好的規劃,否則會有一些異常的使用現象,這些我們以後都會說明。

我們接着再舉一些例子:

leaf-S3 板子的 BOOT 按鈕,其實就是 GPIO 0, 雖然在開機的過程中,這個接腳選擇是否進入燒錄模式,一旦開機完成之後,這個接腳可以讓用戶正常使用,因此不妨礙我們做一些實驗。請注意:在實際的產品設計上,千萬不要用 GPIO 0 來控制外部元件!

設定 GPIO 0 爲輸入:

>>> from machine import Pin
>>> P0 = Pin(0, Pin.IN)

我們來看看 P0 的狀態:

>>> P0.value()
1
>>>

可以看出 P0 默認是高電位的!

然後我們按住 P0 不放,執行下列程式:

>>> status = P0.value()

這時我們把 status 印出來:

>>> print(status)
0

我們發現在按下 BOOT 的那個時間,P0是低電位的。


上一篇
09.點亮一顆LED燈與開發板硬體學習入門
下一篇
11.GPIO結合時序
系列文
ESP32 Micropython 從入門到實用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言